/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package controlador;

import Conexion.Conexion;
import Modelo.SIS_LOG;
import Modelo.SIS_PERFILES;
import Modelo.SIS_PROCESO_ROLES;
import Modelo.SIS_ROLES;
import Modelo.SIS_SUB_PROCESO;
import RRHH_Modelo.RHH_CARGO;
import RRHH_Modelo.RHH_CARGO_PERFIL;
import RRHH_Modelo.RHH_USUARIO;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
import javax.management.relation.RoleStatus;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author equipo_4
 */
@WebServlet(name = "SIS_ROLES_CONTROLLER", urlPatterns = {"/SIS_ROLES_CONTROLLER"})
public class SIS_ROLES_CONTROLLER extends HttpServlet {
    
    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    }
    
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    }
    
    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        RHH_USUARIO usuario = ((RHH_USUARIO)request.getSession().getAttribute("usr"));
        Conexion con = new Conexion(usuario.getUSUARIO(), usuario.getPASSWORD());
        String html="false";
        try {
            con.Transacction();
            String proceso=request.getParameter("proceso");
            switch(proceso){
                case "buscarRoll":
                    html=buscarRoll(con,request);
                    break;
                case "CargarProcesos":
                    html=CargarProcesos(con,request);
                    break;
                case "habilitarProceso":
                    html=habilitarProceso(con,request,usuario);
                    break;
                case "modificarPermisos":
                    modificarPermisos(con,request,usuario);
                    break;
                case "GuardarNuevo":
                    html=GuardarNuevo(con,request,usuario);
                    break;
                case "eliminarRol":
                    html=eliminarRol(con,request);
                    break;
            }
            con.commit();
        } catch (Exception ex) {
            con.rollback();
        }
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/plain");
        response.getWriter().write(html);
        con.Close();
    }
     public String CargarProcesos(Conexion con, HttpServletRequest request) throws Exception{
        int id = Integer.parseInt(request.getParameter("id"));
        String text=request.getParameter("text");
        text=text==null?"":text;
        SIS_SUB_PROCESO sis_proceso = new SIS_SUB_PROCESO();
        sis_proceso.setCon(con);
        SIS_PROCESO_ROLES sis_proceso_roles = new SIS_PROCESO_ROLES();
        sis_proceso_roles.setCon(con);
        List<SIS_PROCESO_ROLES> ListaActivos = sis_proceso_roles.TodosLosActivos(id,text);
        List<SIS_SUB_PROCESO> ListaInactivos = sis_proceso.TodosLosInactivos(id,text);
        String html="<div class='contenedor50 c1' style=\"border-right: solid white thin;\" data-estado='Inactivo'>";
        for(int i = 0; i<ListaInactivos.size(); i++)
        {
            html+="<div class='draggable ui-draggable ui-draggable-handle ui-droppable' data-estado='inactivo' data-id="+(int)ListaInactivos.get(i).getID()+">"
                    + ListaInactivos.get(i).getDESCRIPCION()
                    +"</div>";
        }
        html+="</div><div class='contenedor50 c2' data-estado='activo'>"
                ;
         for(int i = 0; i<ListaActivos.size(); i++)
        {
            String eliminar="";
            String actualizar="";
            String insertar="";
            if(ListaActivos.get(i).getINSERTAR()== 1.0)insertar="checked";
            else insertar="";
            if(ListaActivos.get(i).getELIMINAR()==1.0)eliminar="checked";
            else eliminar="";
            if(ListaActivos.get(i).getMODIFICAR()==1.0)actualizar="checked";
            else actualizar="";
            sis_proceso = sis_proceso.BuscarXid(ListaActivos.get(i).getID_PROCESO());
            html+="<div class='draggable ui-draggable ui-draggable-handle ui-droppable'  data-estado='activo' data-id="+(int)ListaActivos.get(i).getID_PROCESO()+" >"
                    + "<div style=\"margin-botton:3px; \">"+sis_proceso.getDESCRIPCION()+"</div>"
                    +"<input type='checkbox' class='permiso' onchange='cambioPermiso(this,"+(int)sis_proceso.getID()+",1)' "+insertar+" />"
                    +"<input type='checkbox' class='permiso' onchange='cambioPermiso(this,"+(int)sis_proceso.getID()+",2)' "+actualizar+" />"
                    +"<input type='checkbox' class='permiso' onchange='cambioPermiso(this,"+(int)sis_proceso.getID()+",3)' "+eliminar+" />"
                    +"</div>";
        }
        html+="</div>";
        return html;
    }
    public String eliminar(Conexion con, HttpServletRequest request) throws Exception{
        String id=request.getParameter("id");
        SIS_PERFILES perfil =new SIS_PERFILES();
        perfil.setCon(con);
        perfil.setID(Integer.parseInt(id));
        perfil.EliminarXid();
        return "true";
    }
    public String GuardarNuevo(Conexion con, HttpServletRequest request, RHH_USUARIO usr) throws Exception{
        String desc = request.getParameter("descripcion");
        SIS_ROLES sis_roles = new SIS_ROLES(0, desc);
        sis_roles.setCon(con);
        if(sis_roles.Insertar())      
            SIS_LOG.LOG(usr.getID(), 0, "CREO EL ROL "+desc, con);
        return "true";
    }
    public String eliminarRol(Conexion con, HttpServletRequest request) throws SQLException
    {
         Double IdRol = Double.parseDouble(request.getParameter("id"));
         SIS_ROLES roles = new SIS_ROLES(IdRol, "");
         roles.setCon(con);
         roles.EliminarXid();
         return "true";
    }
    public String buscarRoll(Conexion con, HttpServletRequest request) throws Exception{
        RHH_CARGO cargos = new RHH_CARGO(con);
        cargos.setCon(con);
        String text=request.getParameter("text");
        SIS_ROLES sis_roles = new SIS_ROLES();
        sis_roles.setCon(con);
        List<SIS_ROLES> Lista = sis_roles.buscarXdescripcion(text);
        String html="";
        for(int i =0; i<Lista.size(); i++)
        {
            html+="<div onclick='abrirpop("+Lista.get(i).getID()+")' style='padding: 10px; width: 157px; margin: 5px; height: 55px; border-radius: 7px; background: none repeat scroll 0% 0% white; opacity: 0.95; float: left;'>\n" +
"                    <div onclick='abrireliminar("+(int)Lista.get(i).getID()+")'>(X)</div><div class='centrado negrilla'>"+Lista.get(i).getDESCRIPCION()+"</div>\n" +
"                </div>";
        }
        return html;
    }
    
    public String habilitarProceso(Conexion con, HttpServletRequest request,RHH_USUARIO usuario ) throws SQLException, Exception{
        SIS_PROCESO_ROLES proc_rol = new SIS_PROCESO_ROLES();
        proc_rol.setCon(con);
        double idrol = Double.parseDouble(request.getParameter("id"));
        double idproceso = Double.parseDouble(request.getParameter("subpro"));
        try
        {
            proc_rol=proc_rol.BuscarXid(idrol, idproceso);
            proc_rol.Desabilitar(idrol, idproceso);
            SIS_ROLES sis = new SIS_ROLES();
            sis.setCon(con);
            sis = sis.BuscarXid(idrol);
            SIS_SUB_PROCESO sis2 = new SIS_SUB_PROCESO();
            sis2.setCon(con);
            sis2 = sis2.BuscarXid(idproceso);
            SIS_LOG.LOG(usuario.getID(), 0, "QUITO EL PROCESO "+sis2.getDESCRIPCION()+" DE EL ROL "+sis.getDESCRIPCION(), con);
        }
        catch(Exception ex)
        {
            proc_rol = new SIS_PROCESO_ROLES();
            proc_rol.setCon(con);
            proc_rol.Abilitar(idrol, idproceso);
            SIS_ROLES sis = new SIS_ROLES();
            sis.setCon(con);
            sis = sis.BuscarXid(idrol);
            SIS_SUB_PROCESO sis2 = new SIS_SUB_PROCESO();
            sis2.setCon(con);
            sis2 = sis2.BuscarXid(idproceso);
            SIS_LOG.LOG(usuario.getID(), 0, "AGREGO EL PROCESO "+sis2.getDESCRIPCION()+" A EL ROL "+sis.getDESCRIPCION(), con);
        }
        return CargarProcesos(con, request);
    }
    public void modificarPermisos(Conexion con, HttpServletRequest request,RHH_USUARIO usuario ) throws SQLException{
        SIS_PROCESO_ROLES proc_rol = new SIS_PROCESO_ROLES();
        proc_rol.setCon(con);
        double idrol = Double.parseDouble(request.getParameter("id"));
        double idproceso = Double.parseDouble(request.getParameter("idProceso"));
        String tipo = request.getParameter("tipo");
        String estado = request.getParameter("estado");
        if(tipo.equals("1"))
        {
            if(estado != null)
            {
                proc_rol.ModificarInsertar(1, idrol, idproceso);
                SIS_ROLES sis = new SIS_ROLES();
                sis.setCon(con);
                sis = sis.BuscarXid(idrol);
                SIS_SUB_PROCESO sis2 = new SIS_SUB_PROCESO();
                sis2.setCon(con);
                sis2 = sis2.BuscarXid(idproceso);
                SIS_LOG.LOG(usuario.getID(), 0, "HABILITO EL PERMISO DE INSERTAR EN EL PROCESO "+sis2.getDESCRIPCION()+" DE EL ROL "+sis.getDESCRIPCION(), con);
            }
            else
            {
                proc_rol.ModificarInsertar(0, idrol, idproceso);
                SIS_ROLES sis = new SIS_ROLES();
                sis.setCon(con);
                sis = sis.BuscarXid(idrol);
                SIS_SUB_PROCESO sis2 = new SIS_SUB_PROCESO();
                sis2.setCon(con);
                sis2 = sis2.BuscarXid(idproceso);
                SIS_LOG.LOG(usuario.getID(), 0, "DESHABILITO EL PERMISO DE INSERTAR EN EL PROCESO "+sis2.getDESCRIPCION()+" DE EL ROL "+sis.getDESCRIPCION(), con);
            }
        }
        if(tipo.equals("2"))
        {
            if(estado != null)
            {
                proc_rol.ModificarActualizar(1, idrol, idproceso);
                SIS_ROLES sis = new SIS_ROLES();
                sis.setCon(con);
                sis = sis.BuscarXid(idrol);
                SIS_SUB_PROCESO sis2 = new SIS_SUB_PROCESO();
                sis2.setCon(con);
                sis2 = sis2.BuscarXid(idproceso);
                SIS_LOG.LOG(usuario.getID(), 0, "HABILITO EL PERMISO DE MODIFICAR EN EL PROCESO "+sis2.getDESCRIPCION()+" DE EL ROL "+sis.getDESCRIPCION(), con);
            }
            else
            {
                proc_rol.ModificarActualizar(0, idrol, idproceso);
                SIS_ROLES sis = new SIS_ROLES();
                sis.setCon(con);
                sis = sis.BuscarXid(idrol);
                SIS_SUB_PROCESO sis2 = new SIS_SUB_PROCESO();
                sis2.setCon(con);
                sis2 = sis2.BuscarXid(idproceso);
                SIS_LOG.LOG(usuario.getID(), 0, "DESHABILITO EL PERMISO DE MODIFICAR EN EL PROCESO "+sis2.getDESCRIPCION()+" DE EL ROL "+sis.getDESCRIPCION(), con);
            }
        }
        if(tipo.equals("3"))
        {
            if(estado != null)
            {
                proc_rol.ModificarEliminar(1, idrol, idproceso);
                SIS_ROLES sis = new SIS_ROLES();
                sis.setCon(con);
                sis = sis.BuscarXid(idrol);
                SIS_SUB_PROCESO sis2 = new SIS_SUB_PROCESO();
                sis2.setCon(con);
                sis2 = sis2.BuscarXid(idproceso);
                SIS_LOG.LOG(usuario.getID(), 0, "HABILITO EL PERMISO DE ELIMINAR EN EL PROCESO "+sis2.getDESCRIPCION()+" DE EL ROL "+sis.getDESCRIPCION(), con);
            }
            else
            {
                proc_rol.ModificarEliminar(0, idrol, idproceso);
                SIS_ROLES sis = new SIS_ROLES();
                sis.setCon(con);
                sis = sis.BuscarXid(idrol);
                SIS_SUB_PROCESO sis2 = new SIS_SUB_PROCESO();
                sis2.setCon(con);
                sis2 = sis2.BuscarXid(idproceso);
                SIS_LOG.LOG(usuario.getID(), 0, "DESHABILITO EL PERMISO DE ELIMINAR EN EL PROCESO "+sis2.getDESCRIPCION()+" DE EL ROL "+sis.getDESCRIPCION(), con);
            }
        }
    }
    
    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
